home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib08.dsk
/
APPLE BOND MANAGER.bas
< prev
next >
Wrap
BASIC Source File
|
2023-02-26
|
19KB
|
567 lines
1 REM **********************
2 REM * BOND MANAGER *
3 REM * BY DOUG SPRINKLE *
4 REM * COPYRIGHT (C) 1982 *
5 REM * BY MICRO-SPARC INC *
6 REM * LINCOLN, MA. 01773 *
7 REM **********************
100 GOTO 11000
110 REM
120 REM
130 REM THIS ROUTINE CONVERTS
140 REM TO XX.XX FORMAT
150 REM
160 REM
170 REM
180 VV = INT(VV *TT)
190 T$ = STR$(VV):SL = LEN(T$) -N2
200 IF SL <P5 THEN T$ = ZZ$ +T$:SL = SL +N2
210 VV$ = LEFT$(T$,SL) +PE$ + RIGHT$(T$,N2)
220 RETURN
1000 REM
1010 REM START SORT
1020 REM
1030 FOR SN = N1 TO I
1040 MX = SN: REM MAX SUBSCRIPT
1050 T = X(A,SN)
1060 FOR SF = SN TO I
1070 IF X(A,SF) <T THEN 1090
1080 T = X(A,SF):MX = SF
1090 NEXT SF
1100 IF MX = SN THEN 1220
1110 REM
1120 REM SWAP FIELDS
1130 REM
1140 FOR SW = N0 TO NQ
1150 T = X(SW,SN)
1160 X(SW,SN) = S(SW,MX)
1170 X(SW,MX) = T
1180 NEXT SW
1190 T$ = BN$(SN)
1200 BN$(SN) = BN$(MX)
1210 BN$(MX) = T$
1220 NEXT SN
1230 RETURN
1240 REM
1250 REM SORT FOR BOND NAME
1260 REM
1270 FOR SN = N1 TO I
1280 MX = SN:T$ = BN$(SN)
1290 FOR SF = SN TO I
1300 IF BN$(SF) >T$ THEN 1320
1310 T$ = BN$(SF):MX = SF
1320 NEXT SF
1330 GOTO 1100
2000 REM
2010 REM
2020 REM THIS ROUTINE DELETES RECORD
2030 REM
2040 CALL -936: VTAB TW: HTAB 15: FLASH : PRINT "DELETING": NORMAL
2050 IF I >P5 THEN 2070
2060 POP : RETURN
2070 FOR MK = N1 TO I
2080 IF BN$(MK) < >AS$ THEN 2170
2090 FOR M = MK TO I
2100 X = M +N1
2110 FOR MM = N0 TO NQ
2120 X(MM,M) = X(MM,X)
2130 NEXT MM
2140 BN$(M) = BN$(X)
2150 NEXT M
2160 I = I -N1
2165 GOTO 2080
2170 NEXT MK
2180 DL = N0
2190 RETURN
3000 REM
3010 REM CALCULATE VALUES
3020 REM
3030 IF DT <P5 THEN GOSUB 4000
3040 IF DI <P5 THEN 3070
3050 JJ = I: CALL -936: VTAB TW: HTAB 18: FLASH : PRINT "WAIT": NORMAL
3060 FOR L = BR TO JJ
3070 X(N6,L) = X(N2,L)/HU
3080 MO = (X(N3,L) -CY) *TW +X(N4,L) -CM
3090 X(N8,L) = ((X(N1,L) -X(N0,L))/X(N0,L))/(MO/TW)
3100 X(N9,L) = (X(N1,L)/X(N0,L)) *X(N6,L)
3110 X(N7,L) = X(N9,L) +X(N8,L)
3120 IF MO >TW THEN 3140
3130 X(N9,L) = X(N9,L) +X(N8,L):X(N8,L) = N0
3140 X(NQ,L) = (N1 -TR) *(X(N9,L) +P5 *X(N8,L)) +P5 *X(N8,L)
3150 IF DI <P5 THEN RETURN
3160 NEXT L
3170 RETURN
4000 CALL -936: VTAB TW
4010 PRINT " ENTER TODAY'S DATE": PRINT
4020 PRINT " BY MONTH,DAY,YR": PRINT : INPUT " (E.G.11,3,1981) ";CM,CD,CY
4030 PRINT : PRINT : HTAB TW: PRINT MO$(CM);" ";CD;", ";CY
4040 PRINT : PRINT : PRINT TAB( 12)"CORRECT (Y/N)?";
4050 GET A$: IF A$ = NL$ THEN 4050
4060 IF LEFT$(A$,N1) < >Y$ THEN 4000
4070 CM = CM +CD/F30
4080 CALL -936
4090 PRINT : PRINT
4100 PRINT " ENTER YOUR MAXIMUM"
4110 PRINT : INPUT " INCREMENTAL TAX RATE ---- ";A$:TR = VAL(A$): IF TR <P5 THEN PRINT G$: GOTO 4080
4120 TR = TR/HU:DT = N1: CALL -936: FLASH : VTAB TW: HTAB 18: PRINT "WAIT": NORMAL : RETURN
4130 RETURN
5000 REM
5010 REM
5020 REM INPUT DATA FROM
5030 REM KEYBOARD ROUTINE
5040 REM
5050 REM
5060 CALL -936:JX = I +N1
5070 FOR I = JX TO HH
5080 CALL -936
5090 INPUT " ENTER BOND NAME ";BN$(I): PRINT
5100 BN$(I) = LEFT$(BN$(I),N5)
5110 INPUT " ENTER PURCHASE PRICE $ ";A$:T = VAL(A$): IF T <P5 THEN HTAB N1: VTAB N2: PRINT G$: GOTO 5110
5120 PRINT :X(N0,I) = T
5130 INPUT " ENTER BOND FACE VALUE $ ";A$:T = VAL(A$): IF T <P5 THEN HTAB N1: VTAB N4: PRINT G$: GOTO 5130
5140 PRINT :X(N1,I) = T
5150 INPUT " ENTER INT. RATE ( % ) ";A$:T = VAL(A$): IF T <P5 THEN HTAB N1: VTAB N6: PRINT G$: GOTO 5150
5160 PRINT :X(N2,I) = T
5170 INPUT " ENTER DUE DATE ( MO.DAY ) ";A$:A = VAL(A$)
5180 IF A = >NW OR A <N1 THEN PRINT G$: HTAB N1: VTAB N9: GOTO 5170
5190 T = HU *(A - INT(A)): IF T >ND THEN PRINT G$: HTAB N1: VTAB N9: GOTO 5170
5200 X(N4,I) = TD *(A - INT(A)) + INT(A): IF X(N4,I) = VAL(A$) THEN X(N4,I) = X(N4,I) +TD/HU
5210 PRINT
5220 INPUT " ENTER DUE DATE (YR 1982) ";A$:T = VAL(A$): IF T <P5 THEN HTAB N1: VTAB NQ: PRINT G$: GOTO 5220
5230 IF LEN(A$) < >N4 THEN PRINT G$: HTAB N1: VTAB 11: GOTO 5220
5240 X(N3,I) = T
5250 PRINT
5260 PRINT : PRINT
5270 CC = I:L = CC
5280 GOSUB 10000
5290 IF NS = N1 THEN NS = N0: GOSUB 3030: RETURN
5300 IF NS = N2 THEN NS = N0: CALL -936: GOTO 5090
5310 IF NS = N4 THEN NS = N0: CALL -936: GOSUB 3030: GOTO 5400
5320 POKE 33,10: POKE 32,30: VTAB N1: HTAB 35: POKE 35,18: REM SET WINDOW
5330 CALL -936: PRINT BN$(I): PRINT : PRINT X(N0,I): PRINT
5340 PRINT X(N1,I): PRINT
5350 PRINT X(N2,I): PRINT
5360 A = INT(X(N4,I)):T = INT(HU *(X(N4,I) -A +CO)/TD)
5370 A$ = STR$(A):T$ = STR$(T): IF LEN(T$) <N2 THEN T$ = "0" +T$
5380 PRINT A$ +PE$ +T$: PRINT
5390 PRINT X(N3,I): PRINT : POKE 33,40: POKE 32,0: POKE 35,24: GOTO 5280
5400 NEXT I
5410 RETURN
6000 REM
6010 REM
6020 REM THIS ROUTINE OUTPUTS
6030 REM ANSWERS TO THE SCREEN
6040 REM
6050 REM
6060 CALL -936:KZ = N1
6070 VTAB 8: PRINT TAB( 5)"ENTER RECORD NO.": PRINT : INPUT " <RTN> FOR ALL RECORDS ";A$
6080 KZ = VAL(A$): IF KZ <P5 THEN KZ = N1
6090 IF KZ >I THEN RETURN
6100 CALL -936
6110 PRINT TAB( N4)"BOND NAME": PRINT : PRINT TAB( N4)"PURCHASE PRICE $": PRINT : PRINT TAB( N4)"BOND FACE VALUE $": PRINT : PRINT TAB( N4)"FACE INTEREST (%)": PRINT
6120 PRINT TAB( N4)"DUE DATE (MO-DAY)": PRINT : PRINT TAB( N4)"DUE DATE ( YEAR )": PRINT : PRINT TAB( N4)"GROSS YIELD (%)": PRINT : PRINT TAB( N4)"CAPITAL GN YLD (%)": PRINT
6130 PRINT TAB( N4)"CURRENT YIELD (%)": PRINT : PRINT TAB( N4)"AFTER TAX YIELD (%)"
6140 FOR K = KZ TO I
6150 REM
6160 REM SET WINDOW
6170 REM
6180 HTAB 30: POKE 33,15: POKE 32,24: POKE 35,BM: CALL -936
6190 T = LEN(BN$(K)):S = ABS(N6 -T)
6200 PRINT SPC( S)BN$(K);" RCD ";K
6210 PRINT
6220 T$ = STR$(X(N0,K)):T = LEN(T$):S = ABS(N6 -T)
6230 PRINT SPC( S)T$: PRINT
6240 T$ = STR$(X(N1,K)):T = LEN(T$):S = ABS(N6 -T)
6250 PRINT SPC( S)T$: PRINT
6260 VV = X(N6,K) +C1: GOSUB 180
6270 T = LEN(VV$):S = ABS(N6 -T)
6280 PRINT SPC( S)VV$: PRINT
6290 A = X(N4,K):B = INT(A)
6300 VV$ = STR$( INT(HU *(A -B +CO)/TD)):S = ABS(N3 - LEN(VV$))
6310 PRINT SPC( S)MO$( INT(X(N4,K)));VV$: PRINT
6320 PRINT SPC( N2)X(N3,K): PRINT
6330 VV = X(N7,K) +C1: GOSUB 180
6340 T = LEN(VV$):S = ABS(N6 -T)
6350 PRINT SPC( S)VV$
6360 PRINT
6370 VV = X(N8,K) +C1: GOSUB 180
6380 T = LEN(VV$):S = ABS(N6 -T)
6390 PRINT SPC( S)VV$
6400 PRINT
6410 VV = X(N9,K) +C1: GOSUB 180
6420 T = LEN(VV$):S = ABS(N6 -T)
6430 PRINT SPC( S)VV$
6440 PRINT
6450 VV = X(NQ,K) +C1: GOSUB 180
6460 T = LEN(VV$):S = ABS(N6 -T)
6470 PRINT SPC( S)VV$
6480 REM RESET WINDOW
6490 POKE 32,0: POKE 33,40
6500 CC = K: GOSUB 10000
6510 BM = 20
6520 IF NS = N1 THEN NS = N0: GOTO 6600
6530 IF NS = N4 THEN NS = N0: GOTO 6590
6540 IF NS = N3 THEN 6570
6550 BN$(K) = AS$:NS = N0:DL = N1: REM SET DELETE FLAG
6560 GOTO 6590
6570 NS = N0:N = CC:L = CC
6580 GOSUB 3070:SC = N0: GOTO 6180
6590 NEXT K
6600 BM = 24: IF DL >P5 THEN GOSUB 2000:DL = N0
6610 RETURN
7000 REM
7010 REM PRINTER OUTPUT
7020 REM
7030 CALL -936
7040 INPUT "PRINT RESULTS? (Y/N) <RET> ";A$
7050 PRINT
7060 IF LEFT$(A$,N1) < >Y$ THEN RETURN
7070 PRINT "TURN ON PRINTER AND": PRINT
7080 INPUT "ENTER PRINTER SLOT NUMBER <RET> ";A$:N = VAL(A$)
7090 IF N <N1 OR N >N7 THEN PRINT G$: GOTO 7030
7100 CALL -936: VTAB 7: PRINT "ENTER FIRST RECORD NO. OR": INPUT "PUSH <RET> FOR FIRST RECORD - ";A$: PRINT
7110 IF A$ = NL$ THEN KK = 1: GOTO 7130
7120 KK = VAL(A$)
7130 IF KK <P5 THEN KK = ON
7140 PRINT "ENTER LAST RECORD NO. OR": INPUT "PUSH <RET> FOR LAST RECORD - ";A$
7150 IF A$ = NL$ THEN LR = I: GOTO 7170
7160 LR = VAL(A$)
7170 CALL -936: PRINT TAB( 6)"PUSH ' S ' TO HALT PRINTING": VTAB 4: HTAB 1: POKE 34,3: PR# N
7180 REM THIS ROUTINE OUTPUTS TO PRINTER
7190 KN = KK +6: IF KN >LR THEN KN = LR
7200 PRINT CHR$(NW): PRINT SPC( 15)"*** BOND YIELD CALCULATIONS ***": PRINT
7210 T = INT(TR *HU +.5)
7220 PRINT SPC( 20)"** TAX RATE ";T;" % **": PRINT
7230 PRINT "RECORD NO. ";
7240 FOR K = KK TO KN
7250 T$ = STR$(K):T = LEN(T$):S = N8 -T
7260 PRINT SPC( S)T$;
7270 NEXT K
7280 PRINT CHR$(NW)
7290 GOSUB 8030
7300 PRINT "BOND NAME ";
7310 FOR K = KK TO KN
7320 IF LEN(BN$(K)) >N8 THEN BN$(K) = LEFT$(BN$(K),N8)
7330 T = LEN(BN$(K)):S = ABS(N8 -T)
7340 PRINT SPC( S)BN$(K);
7350 NEXT K
7360 PRINT CHR$(NW)
7370 GOSUB 8030
7380 PRINT "PURCHASE PRICE ";
7390 FOR K = KK TO KN
7400 T$ = STR$(X(0,K)):T = LEN(T$):S = N8 -T
7410 PRINT SPC( S)T$;
7420 NEXT K: PRINT CHR$(NW)
7430 GOSUB 8030
7440 PRINT "FACE VALUE ";
7450 FOR K = KK TO KN
7460 T$ = STR$(X(N1,K)):T = LEN(T$):S = N8 -T: PRINT SPC( S)T$;: NEXT K
7470 PRINT CHR$(NW)
7480 GOSUB 8030
7490 PRINT "MONTH DUE DATE ";
7500 FOR K = KK TO KN
7510 T = X(N4,K):A = INT(T):T$ = MO$(A)
7520 VV$ = STR$( INT(HU *(T -A +CO)/TD)):T = LEN(VV$):S = N5 -T
7530 PRINT SPC( S)T$;VV$;
7540 NEXT K
7550 PRINT CHR$(NW)
7560 GOSUB 8030
7570 PRINT "YEAR DUE DATE ";
7580 FOR K = KK TO KN
7590 T$ = STR$(X(3,K)):S = 4
7600 PRINT SPC( S)T$;
7610 NEXT K
7620 PRINT CHR$(NW)
7630 GOSUB 8030
7640 PRINT "FACE INTEREST ";
7650 FOR K = KK TO KN
7660 VV = X(N6,K) +C1: GOSUB 180:T = LEN(VV$):S = ABS(N8 -T)
7670 PRINT SPC( S)VV$;
7680 NEXT K
7690 PRINT CHR$(NW)
7700 GOSUB 8030
7710 PRINT "GROSS YIELD ";
7720 FOR K = KK TO KN
7730 VV = X(N7,K) +C1: GOSUB 180:T = LEN(VV$):S = ABS(N8 -T)
7740 PRINT SPC( S)VV$;
7750 NEXT K
7760 PRINT CHR$(NW)
7770 GOSUB 8030
7780 PRINT "CAPITAL GN YLD ";
7790 FOR K = KK TO KN
7800 VV = X(N8,K) +C1: GOSUB 180:T = LEN(VV$):S = ABS(N8 -T)
7810 PRINT SPC( S)VV$;
7820 NEXT K
7830 PRINT CHR$(NW)
7840 GOSUB 8030
7850 PRINT "CURRENT YIELD ";
7860 FOR K = KK TO KN
7870 VV = X(N9,K) +C1: GOSUB 180:T = LEN(VV$):S = ABS(N8 -T)
7880 PRINT SPC( S)VV$;
7890 NEXT K
7900 PRINT CHR$(NW)
7910 PRINT "AFTER TAX YIELD";
7920 FOR K = KK TO KN
7930 VV = X(NQ,K) +C1: GOSUB 180:T = LEN(VV$):S = ABS(N8 -T)
7940 PRINT SPC( S)VV$;
7950 NEXT K
7960 PRINT CHR$(NW)
7970 IF KN > = LR THEN 8070
7980 KK = KK +7:KN = KK +6
7990 IF KN >LR THEN KN = LR
8000 PRINT : PRINT
8010 GOTO 7200
8020 REM KEY DEPRESS SENSE
8030 B = PEEK( -16384): POKE -16368,0: IF B <127 THEN RETURN
8040 IF B = 211 THEN POP : GOTO 8070
8050 RETURN
8060 REM RESET WINDOW AND RECONNECT DOS
8070 POKE 34,0: CALL -375: CALL -365: CALL 1002: RETURN
10000 REM
10010 REM
10020 REM EDIT ROUTINE
10030 REM
10040 NS = 0: POKE 35,24: REM RESET BOT MAR
10050 VTAB 21: HTAB 25: PRINT "R RTN TO MENU"
10060 VTAB 22: HTAB 25: PRINT "D DELETE RCD"
10070 VTAB 23: HTAB 25: PRINT "E EDIT RCD"
10080 VTAB 24: HTAB 24: PRINT "RTN NEXT RCD";
10090 HTAB 1
10100 POKE 33,20: POKE 32,0: POKE 34,22
10110 GET A$: IF A$ = NL$ THEN 10110
10120 IF A$ < >"R" THEN 10150
10130 POKE 33,40: POKE 32,0: POKE 34,0
10140 NS = 1: RETURN
10150 IF A$ < >"D" THEN 10180
10160 POKE 33,40: POKE 32,0: POKE 34,0
10170 NS = 2: RETURN
10180 IF A$ < >"E" THEN 10210
10190 POKE 33,40: POKE 32,0: POKE 34,0
10200 NS = 3: GOTO 10250
10210 IF A$ = CHR$(NW) THEN 10230
10220 PRINT G$: GOTO 10110
10230 POKE 33,40: POKE 32,0: POKE 34,0
10240 NS = 4: RETURN
10250 REM
10260 REM
10270 REM EDIT ROUTINE
10280 REM
10290 REM SET WINDOW
10300 POKE 33,3
10310 CALL -936: PRINT "1 -"
10320 PRINT "2 -"
10330 PRINT "3 -"
10340 PRINT "4 -"
10350 PRINT "5 -"
10360 PRINT "6 -": VTAB 23: HTAB 1
10370 POKE 33,40: REM RESET WINDOW
10380 POKE 33,20: POKE 32,0: POKE 34,21
10390 REM
10400 CALL -936: PRINT "ENTER FIELD NO."
10410 GET A$: IF VAL(A$) <P5 OR VAL(A$) >6.5 THEN PRINT G$: GOTO 10400
10420 A = VAL(A$)
10430 CALL -936
10440 PRINT "ENTER NEW ": PRINT EF$(A);" ";: INPUT A$
10450 IF A = 1 THEN BN$(CC) = LEFT$(A$,N5): GOTO 10570
10460 IF VAL(A$) = N0 THEN PRINT G$: GOTO 10390
10470 IF A = N2 THEN X(N0,CC) = VAL(A$): GOTO 10570
10480 IF A = N3 THEN X(N1,CC) = VAL(A$): GOTO 10570
10490 IF A = N4 THEN X(N2,CC) = VAL(A$): GOTO 10570
10500 IF A < >N5 THEN 10550
10510 A = VAL(A$): IF A <P5 OR A > = NW THEN PRINT G$: GOTO 10390
10520 T = HU *(A - INT(A)): IF T >ND THEN PRINT G$: GOTO 10390
10530 X(N4,CC) = TD *(A - INT(A)) + INT(A): IF X(N4,CC) = VAL(A$) THEN X(N4,CC) = X(N4,CC) +TD/HU
10540 GOTO 10570
10550 IF A = N6 AND LEN(A$) < >N4 THEN PRINT G$: GOTO 10390
10560 X(N3,CC) = VAL(A$): GOTO 10570
10570 CALL -936: POKE 33,3: POKE 34,0: CALL -936: POKE 33,40: RETURN
11000 REM
11010 EF$(1) = "BOND NAME"
11020 EF$(2) = "PUR PRICE"
11030 EF$(3) = "FACE VALUE"
11040 EF$(4) = "INTER RATE"
11050 EF$(5) = "DUE DATE(MO)"
11060 EF$(6) = "DUE DATE(YR)"
11070 REM BN$ =BOND NAME
11080 REM X(6,X)=BOND INTEREST RATE
11090 REM X(7,X)=GROSS YIELD
11100 REM X(8,X)=CAPITAL GAIN YIELD
11110 REM X(9,X)=CURRENT YIELD
11120 REM X(10,X)=REAL YIELD
11130 REM X(0,X)=BOND PRICE
11140 REM X(N1,X)=BOND FACE VALUE
11150 REM X(2,X)=BOND INTEREST
11160 REM X(3,X)=DUE DATE (YR)
11170 REM X(4,X)=DUE DATE (MO)
11180 TT = 10000:HU = 100:ZZ$ = "00":PE$ = ".":TW = 12:P5 = .4:AS$ = "***":N0 = 0:N1 = 1:Y$ = "Y":ST$ = "**":NL$ = "":ND = 31: REM P5 HAS BEEN CHANGED TO .4 - CAPITAL GAIN RATE IS NOW 40%
11190 N5 = 5:N2 = 2:N3 = 3:N4 = 4:F30 = 30:HH = 200:N6 = 6:N7 = 7:N8 = 8:N9 = 9:NQ = 10:NW = 13:BM = 24:TD = 3.3333:CO = .005:C1 = .00005
11200 G$ = "<CTRL-G>": REM G$ = <CONTROL> G
11210 DIM BN$(200),MO$(12),X(10,200),EC$(15)
11220 GOSUB 17000
11230 REM
11240 REM
11250 REM
11260 REM MENUE
11270 REM
11280 REM
11290 CALL -936
11300 PRINT SPC( 14)"*** MENUE ***": PRINT : PRINT
11310 PRINT TAB( N5)"1 - ENTER DATA FROM KBD": PRINT
11320 PRINT TAB( N5)"2 - LOAD DATA FROM DISC": PRINT
11330 PRINT TAB( N5)"3 - SAVE DATA TO DISC": PRINT
11340 PRINT TAB( N5)"4 - DISPLAY/EDIT DATA": PRINT
11350 PRINT TAB( N5)"5 - PRINT RESULTS": PRINT
11360 PRINT TAB( N5)"6 - CHANGE TAX RATE": PRINT
11370 PRINT TAB( N5)"7 - SORT": PRINT
11380 POKE 36,N5 -1: PRINT "8 - END";: HTAB 27: PRINT I;" ";: INVERSE : PRINT "RECORDS": NORMAL : PRINT : PRINT
11390 PRINT TAB( N8)"ENTER SELECTION ";
11400 HTAB 1: VTAB 24: POKE 34,23
11410 GET A$: IF A$ = NL$ THEN 11410
11420 A = VAL(A$)
11430 IF A >P5 AND A <8.5 THEN 11450
11440 PRINT G$: GOTO 11410
11450 POKE 34,0
11460 ON A GOSUB 5060,14000,15000,6060,7030,12000,13000,11480
11470 GOTO 11230
11480 PRINT : PRINT " ARE YOU SURE? (Y/N)"
11490 GET A$: IF A$ = NL$ THEN 11490
11500 IF A$ < >Y$ THEN 11230
11510 END
12000 REM
12010 REM THIS ROUTINE RESETS
12020 REM THE TAX RATE AND
12030 REM RECALCULATES
12040 CALL -936: VTAB 12:MD = 1
12050 GOSUB 4090:DI = 1:BR = N1: GOSUB 3030
12060 DI = 0: RETURN
13000 REM
13010 REM
13020 REM SORT ROUTINE
13030 REM
13040 REM
13050 CALL -936
13060 VS(N0) = N0:VS(N1) = N6:VS(N2) = N7:VS(N3) = N8:VS(N4) = N9:VS(N5) = NQ:VS(N6) = N0:NS(N7) = N1:VS(N8) = N3:VS(N9) = N4
13070 PRINT TAB( 10)"*** SORT ROUTINE ***": PRINT : PRINT
13080 PRINT TAB( N5)"0 - BOND NAME"
13090 PRINT TAB( N5)"1 - BOND INTEREST"
13100 PRINT TAB( N5)"2 - GROSS YIELD"
13110 PRINT TAB( N5)"3 - CAPITAL GAIN YIELD"
13120 PRINT TAB( N5)"4 - CURRENT YIELD"
13130 PRINT TAB( N5)"5 - AFTER TAX YIELD"
13140 PRINT TAB( N5)"6 - BOND PURCHASE PRICE"
13150 PRINT TAB( N5)"7 - BOND FACE VALUE"
13160 PRINT TAB( N5)"8 - BOND DUE DATE(YR)"
13170 PRINT TAB( N5)"9 - BOND DUE DATE(MO)": PRINT
13180 PRINT TAB( N3)"<RET> - RETURN TO MENUE": PRINT : PRINT
13190 PRINT TAB( 5)"ENTER SORT FIELD";
13200 GET A$: IF A$ = NL$ THEN 13200
13210 IF A$ = CHR$(NW) THEN RETURN
13220 IF A$ = "0" THEN A = 0: GOTO 13240
13230 A = VAL(A$): IF A <P5 OR A >9.5 THEN PRINT G$: GOTO 13190
13240 CALL -936: VTAB TW: HTAB 16: FLASH : PRINT "SORTING": NORMAL
13250 IF A = N0 THEN 1270
13260 A = VS(A)
13270 GOTO 1000
14000 ONERR GOTO 16000
14010 REM
14020 REM THIS ROUTINE LOADS DATA
14030 REM FROM FILE 'BONDDATA'
14040 CALL -936: FOR J = N1 TO N8: PRINT G$: NEXT J
14050 VTAB 11: PRINT TAB( 12)"INSERT DATA DISK"
14060 VTAB 13: HTAB 12: INPUT "AND PRESS RETURN";A$
14070 D$ = CHR$(4):BR = N1:JJ = N0: CALL -936: VTAB TW: IF I <P5 THEN 14130
14080 PRINT "APPEND TO EXISTING FILE? (Y/N) ";
14090 GET A$: IF A$ = NL$ THEN 14090
14100 IF LEFT$(A$,N1) < >Y$ THEN I = N0:BR = N1: GOTO 14120
14110 JJ = I:BR = I
14120 PRINT : PRINT
14130 PRINT "ENTER FILE IDENTIFIER "
14140 PRINT : PRINT "OR PRESS 'C' FOR CATALOG"
14150 PRINT : PRINT "OR 'M' TO RETURN TO MENUE ";
14160 GET FF$: IF FF$ = NL$ THEN 14160
14170 IF FF$ = "M" THEN RETURN
14180 IF FF$ < >"C" THEN 14240
14190 PRINT " ": CALL -936
14200 PRINT D$;"CATALOG"
14210 PRINT : PRINT "PRESS ANY KEY TO CONTINUE":
14220 GET A$: IF A$ = NL$ THEN 14220
14230 GOTO 14000
14240 CALL -936: VTAB TW: HTAB TW: NORMAL
14250 PRINT "READING BOND DATA";FF$
14260 PRINT D$;"OPEN BONDDATA";FF$
14270 PRINT D$;"READ BONDDATA";FF$
14280 INPUT KK
14290 I = I +KK
14300 IF I >HH THEN I = HH
14310 FOR J = JJ +N1 TO I
14320 INPUT BN$(J)
14330 INPUT X(N0,J)
14340 INPUT X(N1,J)
14350 INPUT X(N2,J)
14360 INPUT X(N4,J)
14370 INPUT X(N3,J)
14380 NEXT J
14390 PRINT D$;"CLOSE BONDDATA";FF$
14400 DI = N1: GOSUB 3030:DI = N0: RETURN : REM CALCULATE RESULTS
15000 ONERR GOTO 16000
15010 REM
15020 REM THIS ROUTINE SAVES DATA
15030 REM TO FILE 'BONDDATA'
15040 REM
15050 IF I >P5 THEN 15090
15060 CALL -936: VTAB 11: PRINT TAB( 12)"NO DATA IN MEMORY"
15070 VTAB 13: HTAB 14: INPUT "PRESS RETURN";A$
15080 RETURN
15090 CALL -936: FOR J = N1 TO N8: PRINT G$: NEXT J
15100 VTAB 11: PRINT TAB( 12)"INSERT DATA DISK"
15110 VTAB 13: HTAB 12: INPUT "AND PRESS RETURN";A$
15120 CALL -936: VTAB TW: HTAB TW
15130 PRINT "ENTER FILE NUMBER ";
15140 GET FF$: IF FF$ = NL$ THEN 15140
15150 REM
15160 CALL -936: VTAB TW: HTAB TW: NORMAL
15170 PRINT "WRITING BOND DATA";FF$
15180 D$ = CHR$(4)
15190 PRINT D$;"OPEN BONDDATA";FF$
15200 PRINT D$;"DELETE BONDDATA";FF$
15210 PRINT D$;"OPEN BONDDATA";FF$
15220 PRINT D$;"WRITE BONDDATA";FF$
15230 PRINT I
15240 FOR J = N1 TO I
15250 PRINT BN$(J)
15260 PRINT X(N0,J)
15270 PRINT X(N1,J)
15280 PRINT X(N2,J)
15290 PRINT X(N4,J)
15300 PRINT X(N3,J)
15310 NEXT J
15320 PRINT D$;"CLOSE BONDDATA";FF$
15330 NORMAL
15340 RETURN
16000 REM
16010 REM
16020 REM ERROR ROUTINE
16030 REM
16040 REM
16050 EC = PEEK(222)
16060 GOTO 16160
16070 CALL -936: FOR T = N1 TO N8: PRINT G$: NEXT T
16090 VTAB 12: PRINT " *** DISK ERROR ***"
16130 PRINT : PRINT EC$(EC)
16140 PRINT : INPUT "PUSH RETURN TO CONTINUE";A$
16150 GOTO 11230
16160 EC$(1) = "LANGUAGE NOT AVAILABLE"
16170 EC$(4) = "WRITE PROTECTED"
16180 EC$(5) = "END OF DATA"
16190 EC$(6) = "FILE NOT FOUND"
16200 EC$(8) = "I/O ERROR"
16210 EC$(9) = "DISK FULL"
16220 EC$(10) = "FILE LOCKED"
16230 EC$(11) = "SYNTAX ERROR"
16240 GOTO 16070
17000 T$ = "JANFEBMARAPRMAYJUNJLYAUGSEPOCTNOVDEC"
17010 T = -N2
17020 FOR J = N1 TO TW
17030 T = T +N3
17040 MO$(J) = MID$ (T$,T,N3)
17050 NEXT J: RETURN